package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.*;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;

/**
 * 材料Mapper接口
 * 
 * @author ruoyi
 * @date 2020-12-16
 */
public interface MaterialMapper 
{
    /**
     * 查询材料
     * 
     * @param mId 材料ID
     * @return 材料
     */
    public Material selectMaterialById(Long mId);
    /** @Description: 项目添加材料 
    * @Param: [pid, mid] 
    * @returns: int
    * @Author: Administrator
    * @Date: 2020/12/22 17:18
    **/
    
    int insertMaterial(MaterialFive materialFive);
    /** @Description:
    * @Param:  查询项目中有没有这个材料
    * @returns:  
    * @Author: Administrator
    * @Date: 2020/12/22 17:17
    **/
    
    int selectProjectsMaterial(MaterialThree materialThree);

    /** @Description:
     * @Param:  查询仓库中有没有这个材料
     * @returns:
     * @Author: Administrator
     * @Date: 2020/12/22 17:17
     **/
    int selectMaterialmModel(MaterialFive materialFive);
    /**
     * 查询材料列表
     * 
     * @return 材料明细集合
     */
    public List<MaterialEight> selectMaterialList(HashMap map);



    /**
     * 查询材料列表
     *
     * @return 材料集合
     */
    public List<Material> selectMaterialListQuery(HashMap map);

    Double selectOutboundVolume(@Param("mid")Long getmId, @Param("pid")Integer pid);

    Double selectInboundVolume(@Param("mid")Long getmId, @Param("pid")Integer pid);

    /**
     * 查询单材料明细列表
     *
     * @param材料
     * @return 材料集合
     */
    List<MaterialSeven> selectmaterialdetailsList(HashMap<String, Object> map);

    /**
     * 查询单材料记录明细列表
     *
     * @param材料
     * @return 材料集合
     */
    List<Material> selectmaterialRecordList(HashMap<String, Object> map);
    List<Material> queryMaterials(Material material);


    /**
     * 领料回显
     *
     */
    List<PickCondition> searchByMid(HashMap<String,Object> map);

    //去仓库删除明细材料
    int deleteByCondition(PickCondition pickCondition);

    //根据仓库名字查项目Id
    Long selectWarehouseByWname(String Wname);

    // 去仓库修改材料明细的数量
    int updateSum(HashMap map);

    //从项目中加材料
    int insertMaterialByCondition(PickCondition pickCondition);

    //从材料操作记录中插入数据(领料)
    int insertPickRecord(PickCondition pickCondition);

    //根据项目名查项目id
    String selectPnameByPid(Long id);

    //从仓库操作记录中插入操作记录（出库记录）
    int outFromWareHouse(PickCondition pickCondition);

    //退料回显
    List<PickCondition> selectMatById(HashMap<String, Object> map);

    /**
     * 退料
     * @param材料
     * @return 材料集合
     */
    //退料退完去项目材料明细中删除
    int deleteMatByCondition(PickCondition pickCondition);

    //退料没退完去修改数量
    int updateMatSum(HashMap map);

    //去仓库加材料
    int  addMat(PickCondition pickCondition);

    //退料查看退的仓库是否有这个材料了
    int selectMat(HashMap<String, Object> map);

    //退料在仓库中插入一个数据
    int insertMat(HashMap<String, Object> map);

    //去项目操作记录中添加记录
    int  addProRecord(PickCondition pickCondition);

    //去仓库操作记录中添加记录
    int addWareRecord(PickCondition pickCondition);


    List<String> sreturnWares();

    //从项目中删除材料
    int deleteMaterial(HashMap map);
    //材料是否用完
    int selectmaterialdetailssum(@Param("pid") long pid, @Param("mid") long mid);
    int selectmaterialdetailscount(@Param("pid") long pid, @Param("mid") long mid);

    //寻找此种项目中没有没此种材料
    PickCondition selectSameMat(PickCondition pickCondition);

    int insertMaterialproject(MaterialThree materialThree);


    List<HashMap> projectCost(Long pId);

    void insertMatOnly(MaterialThree materialThree);


    //查询当前材料Id
    Long selectMId(MaterialThree materialThree);
}
